package com.hspedu.enum_;

/**
 * @author DL5O
 * @version 1.0
 * 演示Enum类的各种方法的使用
 */
public class EnumExercise {
    public static void main(String[] args) {
        //使用Season3 枚举类，来演示各种方法
        Season3 autumn = Season3.AUTUMN;
        //name 得到枚举对象的名称
        System.out.println(autumn.name());//AUTUMN

        //ordinal()输出的是该枚举对象的次序，从0开始编号的
        //因此autumn是第三个，因此输出2
        System.out.println("序号:"+autumn.ordinal());//2，编号

        //values,返回一个数组就Season2[]，
        //含有定义的所有枚举对象
        Season3 [] values = Season3.values();
        System.out.println("====遍历取出枚举对象(增强for)====");
        for (Season3 season:values){//整强for循环
            System.out.println(season);
        }

        /*
        补充增强for循环
        int[] nums = {1,4,6};
        //传统写法
        System.out.println("====普通for循环====");
        for (int i = 0; i < nums.length; i++) {
            System.out.println(nums[i]);
        }

        //增强for循环
        System.out.println("====增强for循环====");
        for (int i : nums) {
            //执行流程，依次从数组nums中取出数据，赋给i，
            //如果取出完毕，则退出for循环
            System.out.println("i=" + i);
        }
        */

        // valueOf：将字符串转换成枚举对象，要求字符串必须为已有的常量名，
        // 否则报异常！
        //1. 根据你输入的 "AUTUMN" 到Season3的枚举对象中去找到
        //2. 如果找到了就返回，没有找到就报错
        Season3 autumn1= Season3.valueOf("AUTUMN");
        System.out.println("autumn1=" + autumn1);
        System.out.println(autumn == autumn1);


        //compareTo
        //1.就是把AUTUMN的编号和SUMMER对象的编号进行比较
        //2.用AUTUMN的编号(2) - SUMMER的编号(3) = -1
        System.out.println(Season3.AUTUMN.compareTo(Season3.SUMMER));//-1
        System.out.println(Season3.SUMMER.compareTo(Season3.AUTUMN));//1
    }
}

enum Season3 {

    //使用enum 来实现枚举类
    //1. 使用关键字 enum 替代 class
    //2. public final static Season_ SPRING = new Season_("春天", "温暖");
    //   直接使用 SPRING("春天","温暖"); 进行替代 常量名(实参列表) 等价了前面这句话
    //3. 如果有多个常量(对象),使用 "," 间隔即可
    //4. 如果使用enum 来实现枚举，要求将定义常量写在最前面
    //5. 如果我们使用的是无参构造器，创建常量对象，则可以省略()
    SPRING("春天", "温暖"), WINTER("冬天", "寒冷"),
    AUTUMN("秋天", "凉爽"), SUMMER("夏天", "炎热");


    private String name;
    private String desc;//描述


    private Season3(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }


    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return "Season3{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}